#pragma once
#include "CurvedPathPlanner.h"
#include "Data_SP.h"

class GeoRefSurfSlice
{

public:
	void RefSurfSlice(std::vector<Points> grids, std::vector<TET> tetrahedrons, std::vector<Faces> allfaces, std::vector<Points> refgrids, double layh, double meshsize, bool boundsmooth, bool meshsmooth, double nozzle_angle);
	void RefSurfSlice_withSupport(std::vector<Points> grids, std::vector<TET> tetrahedrons, std::vector<Faces> allfaces, std::vector<Points> refgrids, double layh, double meshsize, double pathwidth, bool boundsmooth, bool meshsmooth, Eigen::MatrixXd  Support_V, Eigen::MatrixXi  Support_F, double alpah, double nozzle_angle);
	std::vector<std::vector<Pathdata>> CeoGenerateCurvedLatticePaths(std::vector<SliceTool_Ref> All_SlicerTool, double xlen, double ylen, double alpha, double pathwidth, double interplen);
	std::vector<std::vector<Pathdata>> GenerateCurvedHoneycombPaths(std::vector<SliceTool_Ref> All_SlicerTool, double LT, double pathwidth, double interplen);
	std::vector<std::vector<Pathdata>> CeoGenerateCurvedZigzagPaths(std::vector<SliceTool_Ref> All_SlicerTool, double alpha, double pathwidth, double interplen);
	std::vector<std::vector<Pathdata>> CeoGenerateCurvedContourPaths(std::vector<SliceTool_Ref> All_SlicerTool, int num, double pathwidth, double interplen);
	std::vector<std::vector<Pathdata>> CeoGenerateCurvedSupportPaths(std::vector<SliceTool_Ref> All_SlicerTool, double alpha, double pathwidth, double interplen);

	void CountSupportRatio(std::vector<Points> grids, std::vector<TET> tetrahedrons, double alpha);
	bool GeoOutputVecSlice(std::vector<SliceTool_Ref> All_SlicerTool, string filename);
	std::vector<Pathdata> Sorted(std::vector<SliceTool_Ref> All_SlicerTool, double pathwidth, double nozzle_retract_dist);
	
private:

};